<?php

class AdmNotificacionListado extends TPage {
//<editor-fold defaultstate="collapsed" desc="Constantes">
  const SESION_DATOS = "arr";
  const CAMPO_ORDEN_DATAGRID = "CampoOrdenDataGrid";
  //funciones pagina
  const FUNCION_VER = "Ver";
  const FUNCION_CREAR = "Crear";
  const FUNCION_EDITAR = "Editar";
  const FUNCION_ELIMINAR = "Eliminar";
  const FUNCION_VER_ESTADISTICA = "VerEstadistica";

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Privados">
  /**
   * obtiene los registros desde la base de datos
   * @author VSR, 01/01/2011
   */
  private function obtenerDatos(){
    try {
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      //obtiene valores de los controles
      $idUsuario = $oUsuario->getId();
      $textoFiltroTitulo = Utilidades::isNull($this->txtFiltroTitulo->Text, "-1");
      $textoFiltroDescripcion = Utilidades::isNull($this->txtFiltroDescripcion->Text, "-1");
      $textoFiltroFechaDesde = Utilidades::isNull($this->txtFiltroFechaDesde->Text, "-1");
      $textoFiltroFechaHasta = Utilidades::isNull($this->txtFiltroFechaHasta->Text, "-1");
      $activo = ($this->chkFiltroActivo->Checked) ? "1" : "0";

      //obtiene listado
      $arr = Notificacion::obtenerListadoConFiltro($idUsuario, $textoFiltroTitulo, $textoFiltroDescripcion, $activo, $textoFiltroFechaDesde, $textoFiltroFechaHasta);

      //guarda el resultado en session
      Utilidades::grabarSessionPorNombre(self::SESION_DATOS, $arr);
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * actualiza los controles de la pagina segun los datos obtenidos
   * @author VSR, 01/01/2011
   */
  private function actualizaInterfaz(){
    $totalRegistros = 0;
    try {
      $arr = Utilidades::obtenerSessionPorNombre(self::SESION_DATOS);
      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0) {
        $this->pnlHolderGrilla->Visible = true;
        //carga la grilla a utilizar
        $this->dgNotificaciones->Visible = true;
        $this->dgNotificaciones->DataSource = $arr;
        $this->dgNotificaciones->dataBind();
        Utilidades::configurarPaginadorDataGrid($this->dgNotificaciones->PagerStyle, $totalRegistros, $this->dgNotificaciones->PageSize);
        Utilidades::mostrarTotalRegistrosGrilla($totalRegistros, $this->lblTotalRegistros);
      } else {
        $this->pnlHolderGrilla->Visible = false;
        $this->pnlMensajeUsuario->Visible = true;
        $textoMensaje = "No se encontraron registros";
        Utilidades::setPanelMensajeUsuario($this->pnlMensajeUsuario, $textoMensaje, "50%", Utilidades::ESTILO_MENSAJE_ADVERTENCIA);
        //oculta la grilla
        $this->dgNotificaciones->Visible = false;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * inicializa algunos controles cuando se carga por primera vez la pagina
   * @param <type> $isPostBack
   * @author VSR, 01/01/2011
   */
  private function inicializaControles($isPostBack){
    try {
      $registrosPorPagina = $this->txtFiltroRegistrosPorPagina->Text;

      //-- inicializacion de controles que dependen del postBack --
      if(!$isPostBack){
        //colocar controles
      }

      //-- inicializacion de controles que NO dependen del postBack --
      if($registrosPorPagina == "") {
        $this->txtFiltroRegistrosPorPagina->Text = Utilidades::obtenerRegistrosPorPaginaDefault($this->Application);
      }
      $this->btnFiltrar->Attributes->Add("onclick", "return(validarFormularioBusquedaNotificacion())");
      $this->btnNuevo->Attributes->Add("onclick", "abrirFormularioNotificacion('0')");

      //verifica los permisos sobre los controles
      $this->verificarPermisos();

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * verifica los permisos sobre los controles
   * @author VSR, 01/01/2011
   */
  private function verificarPermisos(){
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);
    $this->pnlContenido->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_VER);
    $this->btnNuevo->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_CREAR);
    if(!$this->pnlContenido->Visible){
      $this->pnlMensajeAcceso->Visible = true;
      Utilidades::setPanelMensajeUsuario($this->pnlMensajeAcceso, "No tiene permiso para ver esta p&aacute;gina", "50%", Utilidades::ESTILO_MENSAJE_ERROR);
    }
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Eventos Controles">
  public function onLoad($param) {
    parent::onLoad($param);
    $this->inicializaControles($this->IsPostBack);
    $this->txtThemeBaseUrl->Value = $this->Page->Theme->BaseUrl;

    //si viene la primera vez obtenemos dato y actualizamos interfaz
    if($this->txtCargaDesdePopUp->Value == "1"){
      $this->obtenerDatos();
      $this->actualizaInterfaz();
    }
    $this->txtCargaDesdePopUp->Value = "0";
  }

  public function btnFiltrarClick($sender, $param){
    $pageSize = trim($this->txtFiltroRegistrosPorPagina->Text);
    if($pageSize == "" || $pageSize == "0") {
      $pageSize = Utilidades::obtenerRegistrosPorPaginaDefault($this->Application);
      $this->txtFiltroRegistrosPorPagina->Text = $pageSize;
    }
    //asigna total de registros por pagina
    $this->dgNotificaciones->PageSize = $pageSize;
    //Muestra la primera pagina del paginador
    $this->dgNotificaciones->CurrentPageIndex = 0;
    $this->obtenerDatos();
    $this->actualizaInterfaz();
  }

  public function onSortDataGrid($sender, $param) {
    $arr = Utilidades::obtenerSessionPorNombre(self::SESION_DATOS);
    $campoOrdenActualDataGrid = Utilidades::isNull(Utilidades::obtenerSessionPorNombre(self::CAMPO_ORDEN_DATAGRID),"");
    //obtiene el nuevo orden del arreglo
    $arr = Utilidades::obtenerSortArray($arr, $campoOrdenActualDataGrid, $param->SortExpression);
    //graba el orden actual
    Utilidades::grabarSessionPorNombre(self::CAMPO_ORDEN_DATAGRID, $campoOrdenActualDataGrid);
    //graba el array ordenado
    Utilidades::grabarSessionPorNombre(self::SESION_DATOS, $arr);
    //asigna
    $this->actualizaInterfaz();
  }

  public function onChangePageDataGrid($sender,$param) {
    $this->dgNotificaciones->CurrentPageIndex = $param->NewPageIndex;
    $this->actualizaInterfaz();
  }

  public function onPagerCreatedDataGrid($sender,$param) {
    $param->Pager->Controls->insertAt(0,"<span class=\"cssPaginadorNormal\">P&aacute;gina:</span> ");
  }

  public function onDataBoundDataGrid($sender, $param){
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);
    $indicePrimeraFila = Utilidades::obtenerIndicePrimeraFilaGrilla($this->dgNotificaciones);
    $themeBaseUrl = $this->txtThemeBaseUrl->Value;
    $item = $param->Item;
    $textoPlazoDias = "";

    if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
    {
      $txtIdNotificacion = $item->findControl("txtIdNotificacion");
      $txtEstado = $item->findControl("txtEstado");
      $txtDiferenciaDias = $item->findControl("txtDiferenciaDias");
      $txtTitulo = $item->findControl("txtTitulo");
      $lblDetalleNotificacion = $item->findControl("lblDetalleNotificacion");
      $lblEliminar = $item->findControl("lblEliminar");
      $lblDescripcion = $item->findControl("lblDescripcion");
      $lblEstadistica = $item->findControl("lblEstadistica");
      $lblTitulo = $item->findControl("lblTitulo");

      //obtiene valores
      $estado = $txtEstado->Value;
      $diferenciaDias = $txtDiferenciaDias->Value;

      switch ($estado) {
        case "Vencido":
          $textoPlazoDias = "<span class=\"cssInactivo\">[Terminado]</span>";
          break;
        case "Activo":
          if($diferenciaDias == "0") {
            $textoPlazoDias = "[Termina hoy]";
          } elseif($diferenciaDias == "1") {
            $textoPlazoDias = "[Termina ma&ntilde;ana]";
          } else {
            $textoPlazoDias = "[Terminar&aacute; en: $diferenciaDias d&iacute;a".( ($diferenciaDias == "1") ? "":"s" )."]";
          }
          $textoPlazoDias = "<span class=\"cssMensajeExito\">".$textoPlazoDias."</span>";
          break;
        case "Programado":
          if($diferenciaDias == "1") {
            $textoPlazoDias = "[Se activar&aacute; ma&ntilde;ana]";
          } else {
            $textoPlazoDias = "[Se activar&aacute; en: $diferenciaDias d&iacute;a".( ($diferenciaDias == "1") ? "":"s" )."]";
          }
          $textoPlazoDias = "<span class=\"cssAlerta\">".$textoPlazoDias."</span>";
          break;
        default:
          $textoPlazoDias = "";
          break;
      }

      $lblDetalleNotificacion->Text = "<a href=\"javascript:;\" onclick=\"abrirFormularioNotificacion('".$txtIdNotificacion->Value."')\"><img src=\"" . $themeBaseUrl . "/img/_blank.gif\" class=\"ico18-edit\" alt=\"editar\" title=\"editar\" /></a>&nbsp;&nbsp;";
      $lblDetalleNotificacion->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_EDITAR);
      $lblTitulo->Text = (Utilidades::tienePermiso($paginaActual, self::FUNCION_EDITAR)) ? "<a href=\"javascript:;\" onclick=\"abrirFormularioNotificacion('".$txtIdNotificacion->Value."')\" class=\"cssLink\">".$txtTitulo->Value."</a>" : $txtTitulo->Value;
      $lblEliminar->Text = "<a href=\"javascript:;\" onclick=\"eliminarNotificacion('".$txtIdNotificacion->Value."')\"><img src=\"" . $themeBaseUrl . "/img/_blank.gif\" class=\"ico18-trush\" alt=\"eliminar\" title=\"eliminar\" /></a>&nbsp;&nbsp;";
      $lblEliminar->Visible = Utilidades::tienePermiso($paginaActual, self::FUNCION_ELIMINAR);
      $lblEstadistica->Text = "<a href=\"javascript:;\" onclick=\"verEstadisticaNotificacion('".$txtIdNotificacion->Value."')\"><img src=\"" . $themeBaseUrl . "/img/_blank.gif\" class=\"ico18-chart-lines\" alt=\"ver estad&iacute;stica\" title=\"ver estad&iacute;stica\" /></a>";
      $lblEstadistica->Visible = ($estado == "Programado") ? false : Utilidades::tienePermiso($paginaActual, self::FUNCION_VER_ESTADISTICA);
      $lblDescripcion->Text = $lblDescripcion->Text."<br/>".$textoPlazoDias;

      //limpia controles
      $txtIdNotificacion->Value = "";
      $txtEstado->Value = "";
      $txtDiferenciaDias->Value = "";
      $txtTitulo->Value = "";

      //asigna indice de la fila
      $indiceFila = $indicePrimeraFila + $item->ItemIndex;
      //asigna valor del indice de la fila al control
      Utilidades::setControlIndiceFila($item, "lblIndiceFila", $indiceFila);
    }
  }

//</editor-fold>

}

?>
